home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / other / apic / examples / 84emu.lst < prev    next >
File List  |  1998-01-05  |  20KB  |  500 lines

  1. #PIC V1.0 (c)1997 J.Petroglou    LIST FILE
  2. #file: dh2:IDE/APICforAMINET/APIC/examples/84EMU.asm
  3. #date: Sun Dec 14 20:58:42 1997
  4. #pic : PIC16C57
  5. ADDR CODE     SRCLINE SOURCECODE
  6.  
  7. 0000             000001 
  8. 0000             000002 
  9. 0000             000003 ;
  10. 0000             000004 ; This 16c57 prog can emulate an 16c84 using PICSim. PICEmu
  11. 0000             000005 ; is connected direct with the RS232 port. (using 10K for
  12. 0000             000006 ; the AMIGA TXD line). PortA and PortB are used for emulating
  13. 0000             000007 ; the 16c84. portC is used for the serial connection. The
  14. 0000             000008 ; communication speed is 38400 Baud @ 11.0592 Mhz clock.
  15. 0000             000009 ;
  16. 0000             000010 ;
  17. 0000             000011 ; © Dirk Duesterberg, 14.12.1997
  18. 0000             000012 ;
  19. 0000             000013 ; duesterb@unixserv.rz.fh-hannover.de
  20. 0000             000014 ; http://linux.rz.fh-hannover.de/~duesterb
  21. 0000             000015 ;
  22. 0000             000016 
  23. 0000             000017 
  24. 0000             000018 
  25. 0000             000019 
  26. 0000             000020 ;commands = 0x5x
  27. 0000             000021 ;
  28. 0000             000022 ;18 pin PIC Emulator soft for 16c57
  29. 0000             000023 ;
  30. 0000             000024 ;command0 = set tris RA, 1->, 1->
  31. 0000             000025 ;command1 = set tris RB, 1->, 1->
  32. 0000             000026 ;
  33. 0000             000027 ;command4 = write RA,    1->, 1<-, 1->
  34. 0000             000028 ;command5 = write RB,    1->, 1<-, 1->
  35. 0000             000029 ;
  36. 0000             000030 ;command8 = read RA,     1->, 1<-
  37. 0000             000031 ;command9 = read RB,     1->, 1<-
  38. 0000             000032 ;
  39. 0000             000033 ;
  40. 0000             000034 
  41. 0000             000035 
  42. 0000             000036 
  43. 0000             000037         list    p=16c57
  44. 0000             000038 
  45. 0000             000039 
  46. 0000             000040 
  47. 0000             000041 
  48. 0000             000042 
  49. 0000             000043 #define    c    03h,0            ;carry bit
  50. 0000             000044 #define    dc    03h,1            ;digit carry bit
  51. 0000             000045 #define    z    03h,2            ;zero bit
  52. 0000             000046 #define    pd    03h,3            ;power down bit
  53. 0000             000047 #define    to    03h,4            ;time out bit
  54. 0000             000048 #define    pa0    03h,5            ;page select bit (for '56 and '57 only)
  55. 0000             000049 #define    pa1    03h,6            ;page select bit (for '57 only)
  56. 0000             000050 
  57. 0000             000051 
  58. 0000             000052 pc    =    02h            ;program counter
  59. 0000             000053 
  60. 0000             000054 RA    =    05h            ;port a
  61. 0000             000055 RB    =    06h            ;port b
  62. 0000             000056 RC    =    07h
  63. 0000             000057 
  64. 0000             000058 
  65. 0000             000059 
  66. 0000             000060 #define    RXD    RC,1
  67. 0000             000061 #define    TXD    RC,2
  68. 0000             000062 
  69. 0000             000063 #define beta
  70. 0000             000064 
  71. 0000             000065 ram    =    08h            ;begin of ram adress
  72. 0000             000066 
  73. 0000             000067     CBLOCK    ram            ;constant block beginning
  74. 0000             000068 
  75. 0000             000068 
  76. 0000             000069       count0
  77. 0000             000070       count1
  78. 0000             000071 
  79. 0000             000071 
  80. 0000             000072       delaycntr
  81. 0000             000073       bitcntr
  82. 0000             000074       serdata
  83. 0000             000075       serbuf
  84. 0000             000076       charcounter
  85. 0000             000077     ENDC                ;end of block
  86. 0000             000078 
  87. 0000             000079 
  88. 0000             000080 
  89. 0000             000081 
  90. 0000             000082 clockspeed    =    .11059200            ;clockspeed is 11.0592 Mhz
  91. 0000             000083 baudrate    =    .38400                ;19200        ;enter baudrate here
  92. 0000             000084 
  93. 0000             000085 
  94. 0000             000086 delay        =    (clockspeed/.4/baudrate-.12)/.4    ;value for baudrate, 12 cycles fixed, 4 cycles delay
  95. 0000             000087 
  96. 0000             000088 
  97. 0000 0C02        000089 start        movlw    02h
  98. 0001 0007        000090         tris    RC
  99. 0002 0C00        000091         movlw    0
  100. 0003 0027        000092         movwf    RC
  101. 0004             000093 
  102. 0004             000094 
  103. 0004 02E8        000095 :loop        decfsz    count0        ;power up timer
  104. 0005 0A04        000096         goto    :loop
  105. 0006 02E9        000097         decfsz    count1
  106. 0007 0A04        000098         goto    :loop
  107. 0008             000099 
  108. 0008             000100 
  109. 0008             000101 
  110. 0008 0C52        000102         movlw    'R'
  111. 0009 002C        000103         movwf    serdata
  112. 000A 0987        000104         call    send_byte
  113. 000B             000105 
  114. 000B             000106 
  115. 000B             000107 
  116. 000B 0C53        000108         movlw    'S'
  117. 000C 002C        000109         movwf    serdata
  118. 000D 0987        000110         call    send_byte
  119. 000E             000111 
  120. 000E             000112 
  121. 000E             000113 
  122. 000E             000114 
  123. 000E 0C54        000115         movlw    'T'
  124. 000F 002C        000116         movwf    serdata
  125. 0010 0987        000117         call    send_byte
  126. 0011             000118 
  127. 0011             000119 
  128. 0011             000120 
  129. 0011             000121 
  130. 0011             000122 
  131. 0011             000123 
  132. 0011 0CF0        000124 loop        movlw    0f0h
  133. 0012 014C        000125         andwf    serdata,w
  134. 0013 0F50        000126         xorlw    050h        ;data = 50h ?
  135. 0014 0743        000127         btfss    z
  136. 0015 0A11        000128         goto    loop        ;no match
  137. 0016             000129         
  138. 0016             000130 
  139. 0016 020C        000131         movf    serdata,w
  140. 0017 0E0F        000132         andlw    0fh        ;clear upper nibble
  141. 0018 01E2        000133         addwf    pc        ;jumptable
  142. 0019             000134 
  143. 0019 0A29        000135         goto    command0    ;write RA tristate register
  144. 001A 0A2D        000136         goto    command1    ;write RB tristate register
  145. 001B 0A31        000137         goto    command2    ;write RC tristate register (not used)
  146. 001C 0A32        000138         goto    command3
  147. 001D 0A33        000139         goto    command4    ;write RA latch
  148. 001E 0A3A        000140         goto    command5    ;write RB latch
  149. 001F 0A41        000141         goto    command6    ;write RC latch  (not used)
  150. 0020 0A41        000142         goto    command7
  151. 0021 0A42        000143         goto    command8    ;read RA pins
  152. 0022 0A46        000144         goto    command9    ;read RB pins
  153. 0023 0A4A        000145         goto    commandA    ;read RC pins
  154. 0024 0A4E        000146         goto    commandB
  155. 0025 0A4E        000147         goto    commandC
  156. 0026 0A4E        000148         goto    commandD
  157. 0027 0A4E        000149         goto    commandE    
  158. 0028 0A4F        000150         goto    commandF    ;version info
  159. 0029             000151 
  160. 0029             000152 
  161. 0029             000153 
  162. 0029             000154 
  163. 0029             000155 
  164. 0029 0997        000156 command0    call    receive_byte
  165. 002A 020C        000157         movf    serdata,w
  166. 002B 0005        000158         tris    RA
  167. 002C 0A11        000159         goto    loop
  168. 002D             000160 
  169. 002D             000161 
  170. 002D 0997        000162 command1    call    receive_byte
  171. 002E 020C        000163         movf    serdata,w
  172. 002F 0006        000164         tris    RB
  173. 0030 0A11        000165         goto    loop
  174. 0031             000166 
  175. 0031             000167 
  176. 0031             000168 
  177. 0031 0A00        000169 command2    goto    start
  178. 0032 0A00        000170 command3    goto    start
  179. 0033             000171 
  180. 0033             000172 
  181. 0033 0205        000173 command4    movf    RA,w
  182. 0034 002C        000174         movwf    serdata
  183. 0035 0987        000175         call    send_byte    ;send read data back (ACKnowledge)
  184. 0036             000176 
  185. 0036 0997        000177         call    receive_byte
  186. 0037 020C        000178         movf    serdata,w
  187. 0038 0025        000179         movwf    RA
  188. 0039             000180 
  189. 0039 0A11        000181         goto    loop
  190. 003A             000182 
  191. 003A             000183 
  192. 003A             000184 
  193. 003A             000185 
  194. 003A 0206        000186 command5    movf    RB,w
  195. 003B 002C        000187         movwf    serdata,w
  196. 003C 0987        000188         call    send_byte    ;send read data back (ACKnowledge)
  197. 003D             000189 
  198. 003D 0997        000190         call    receive_byte
  199. 003E 020C        000191         movf    serdata,w
  200. 003F 0026        000192         movwf    RB
  201. 0040             000193     
  202. 0040 0A11        000194         goto    loop
  203. 0041             000195 
  204. 0041             000196 
  205. 0041             000197 
  206. 0041             000198 command6
  207. 0041             000199 
  208. 0041 0A00        000200 command7    goto    start
  209. 0042             000201 
  210. 0042 0205        000202 command8    movf    RA,w        ;read port
  211. 0043 002C        000203         movwf    serdata
  212. 0044 0987        000204         call    send_byte    ;send read data back (ACKnowledge)
  213. 0045 0A00        000205         goto    start
  214. 0046             000206 
  215. 0046 0206        000207 command9    movf    RB,w        ;read port
  216. 0047 002C        000208         movwf    serdata
  217. 0048 0987        000209         call    send_byte    ;send read data back (ACKnowledge)
  218. 0049 0A11        000210         goto    loop
  219. 004A             000211 
  220. 004A 0CAA        000212 commandA    movlw    0aah
  221. 004B 002C        000213         movwf    serdata
  222. 004C 0987        000214         call    send_byte
  223. 004D 0A11        000215         goto    loop
  224. 004E             000216 
  225. 004E             000217 
  226. 004E             000218 
  227. 004E             000219 
  228. 004E             000220 commandB
  229. 004E             000221 commandC
  230. 004E             000222 commandD
  231. 004E 0A00        000223 commandE    goto    start
  232. 004F             000224 
  233. 004F 006E        000225 commandF    clrf    charcounter
  234. 0050 0958        000226 :loop        call    string
  235. 0051 0EFF        000227         andlw    0ffh
  236. 0052 0643        000228         btfsc    z
  237. 0053 0A11        000229         goto    loop        ;return to start if zero byte
  238. 0054             000230 
  239. 0054 002C        000231         movwf    serdata        ;move character to serial buffer
  240. 0055 0987        000232         call    send_byte
  241. 0056 02AE        000233         incf    charcounter    ;next character
  242. 0057 0A50        000234         goto    :loop
  243. 0058             000235 
  244. 0058             000236 
  245. 0058             000237 
  246. 0058             000238 
  247. 0058             000239 
  248. 0058 020E        000240 string        movf    charcounter,w
  249. 0059 01E2        000241         addwf    pc,f        ;jump table with string followed by a zero byte. 
  250. 005A             000242 
  251. 005A             000243 
  252. 005A             000245 
  253.  
  254.  
  255. beta Version
  256.  
  257.  
  258. 005A             000249 
  259. 005A 0850        000250           retlw    "PIC 16c84 EMU beta version, bla, bla, bla",0ah,0ah    ;string, two linefeeds
  260. 005B 0849        000250 
  261. 005C 0843        000250 
  262. 005D 0820        000250 
  263. 005E 0831        000250 
  264. 005F 0836        000250 
  265. 0060 0863        000250 
  266. 0061 0838        000250 
  267. 0062 0834        000250 
  268. 0063 0820        000250 
  269. 0064 0845        000250 
  270. 0065 084D        000250 
  271. 0066 0855        000250 
  272. 0067 0820        000250 
  273. 0068 0862        000250 
  274. 0069 0865        000250 
  275. 006A 0874        000250 
  276. 006B 0861        000250 
  277. 006C 0820        000250 
  278. 006D 0876        000250 
  279. 006E 0865        000250 
  280. 006F 0872        000250 
  281. 0070 0873        000250 
  282. 0071 0869        000250 
  283. 0072 086F        000250 
  284. 0073 086E        000250 
  285. 0074 082C        000250 
  286. 0075 0820        000250 
  287. 0076 0862        000250 
  288. 0077 086C        000250 
  289. 0078 0861        000250 
  290. 0079 082C        000250 
  291. 007A 0820        000250 
  292. 007B 0862        000250 
  293. 007C 086C        000250 
  294. 007D 0861        000250 
  295. 007E 082C        000250 
  296. 007F 0820        000250 
  297. 0080 0862        000250 
  298. 0081 086C        000250 
  299. 0082 0861        000250 
  300. 0083 080A        000250 
  301. 0084 080A        000250 
  302. 0085             000251 
  303. 0085             000253 
  304. 0085             000257 
  305. 0085             000259 
  306. 0085             000261 
  307. 0085             000262 
  308. 0085 080D        000263         retlw    0dh,0        ;one cr, Zerobyte => stop sending
  309. 0086 0800        000263 
  310. 0087             000264 
  311. 0087             000265 
  312. 0087             000266 
  313. 0087             000267 
  314. 0087             000268 
  315. 0087             000269 
  316. 0087             000270 
  317. 0087             000271 
  318. 0087 0547        000272 send_byte    bsf    TXD        ;set TXD line, dirct connection
  319. 0088 0C08        000273         movlw    8h        ;Eight bits in a byte. 
  320. 0089 002B        000274         movwf    bitcntr
  321. 008A             000275 
  322. 008A 09A6        000276         call    bitdelay    ;Start bit. ((delay * 4) + 4) cycles
  323. 008B             000277 
  324. 008B 032C        000278 xmit        rrf    serdata,f    ;Rotate right moves data bits into
  325. 008C             000279                     ;carry, starting with bit 0. 
  326. 008C             000280 
  327. 008C 0603        000281         btfsc    c        ;clear TXD if carry bit is set
  328. 008D 0447        000282         bcf    TXD        
  329. 008E 0703        000283         btfss    c        ;set TXD if carry bit is clear
  330. 008F 0547        000284         bsf    TXD
  331. 0090             000285 
  332. 0090             000286 
  333. 0090             000287 
  334. 0090 09A6        000288         call    bitdelay    ;Data bit.
  335. 0091             000289 
  336. 0091 02EB        000290         decfsz    bitcntr,f    ;Not eight bits yet? Send next data bit
  337. 0092 0A8B        000291         goto    xmit
  338. 0093             000292 
  339. 0093 0447        000293         bcf    TXD        ;clear TXD
  340. 0094 032C        000294         rrf    serdata,f    ;last rotation
  341. 0095             000295 
  342. 0095             000296 
  343. 0095 09A6        000297         call    bitdelay    ;Stop bit. ((delay * 4) + 4) cycles
  344. 0096             000298 
  345. 0096 0800        000299         retlw    0
  346. 0097             000300 
  347. 0097             000301 
  348. 0097             000302 
  349. 0097 0727        000303 receive_byte    btfss    RXD
  350. 0098 0A97        000304         goto    receive_byte    ;wait until startbit
  351. 0099             000305 
  352. 0099 0C08        000306         movlw    8h        ;Eight bits in a byte. 
  353. 009A 002B        000307         movwf    bitcntr
  354. 009B             000308 
  355. 009B 09AC        000309         call    halfbitdelay    ;wait half bit
  356. 009C             000310 
  357. 009C             000311 
  358. 009C 09A6        000312 rcb        call    bitdelay    ;wait one bit
  359. 009D             000313 
  360. 009D 0627        000314         btfsc    RXD        ;clear c if RXD is set
  361. 009E 0403        000315         bcf    c        
  362. 009F 0727        000316         btfss    RXD        ;set c if RXD is clear
  363. 00A0 0503        000317         bsf    c
  364. 00A1             000318 
  365. 00A1 032C        000319         rrf    serdata,f
  366. 00A2             000320 
  367. 00A2 02EB        000321         decfsz    bitcntr,f    ;Not eight bits yet? Receive next data bit
  368. 00A3 0A9C        000322         goto    rcb
  369. 00A4             000323 
  370. 00A4 09AC        000324         call    halfbitdelay    ;wait one half bit to get out of data area
  371. 00A5             000325 
  372. 00A5 0800        000326         retlw    0
  373. 00A6             000327 
  374. 00A6             000328 
  375. 00A6             000329 ; To change the baud rate, substitute a new value for bitdelay at the beginning of
  376. 00A6             000330 ; this program. 
  377. 00A6             000331 
  378. 00A6             000332 
  379. 00A6             000333 
  380. 00A6 0C0F        000334 bitdelay    movlw    delay        ;this bitdelay delays ((delay * 4) + 4) cycles
  381. 00A7 002A        000335         movwf    delaycntr
  382. 00A8 0000        000336 :loop        nop
  383. 00A9 02EA        000337         decfsz    delaycntr,f
  384. 00AA 0AA8        000338         goto    :loop        ;this is an local loop
  385. 00AB 0800        000339         retlw    0
  386. 00AC             000340 
  387. 00AC             000341 
  388. 00AC             000342 
  389. 00AC 0C08        000343 halfbitdelay    movlw    delay/2 +1        ;this bitdelay delays ((delay * 4) + 4)/2 cycles
  390. 00AD 002A        000344         movwf    delaycntr
  391. 00AE 0000        000345 :loop        nop
  392. 00AF 02EA        000346         decfsz    delaycntr,f
  393. 00B0 0AAE        000347         goto    :loop        ;this is an local loop
  394. 00B1 0800        000348         retlw    0
  395. 00B2             000349 
  396. 00B2             000350 
  397. 00B2             000351 
  398. 00B2             000352 
  399. 07FF             000353         org    7ff
  400. 07FF 0A00        000354         goto    start
  401.  
  402.  
  403. Used Symbols
  404. -----------------------------------------
  405. pc                               00000002
  406. RA                               00000005
  407. RB                               00000006
  408. RC                               00000007
  409. ram                              00000008
  410. count0                           00000008
  411. count1                           00000009
  412. delaycntr                        0000000A
  413. bitcntr                          0000000B
  414. serdata                          0000000C
  415. serbuf                           0000000D
  416. charcounter                      0000000E
  417. clockspeed                       00A8C000
  418. baudrate                         00009600
  419. delay                            0000000F
  420. start                            00000000
  421. loop                             00000011
  422. command0                         00000029
  423. command1                         0000002D
  424. command2                         00000031
  425. command3                         00000032
  426. command4                         00000033
  427. command5                         0000003A
  428. command6                         00000041
  429. command7                         00000041
  430. command8                         00000042
  431. command9                         00000046
  432. commandA                         0000004A
  433. commandB                         0000004E
  434. commandC                         0000004E
  435. commandD                         0000004E
  436. commandE                         0000004E
  437. commandF                         0000004F
  438. string                           00000058
  439. send_byte                        00000087
  440. xmit                             0000008B
  441. receive_byte                     00000097
  442. rcb                              0000009C
  443. bitdelay                         000000A6
  444. halfbitdelay                     000000AC
  445.  
  446.  
  447. Used Defines
  448. -----------------------------------------
  449. beta                             
  450. c                                03h,0 
  451. z                                03h,2 
  452. dc                               03h,1 
  453. pd                               03h,3 
  454. to                               03h,4 
  455. RXD                              RC,1 
  456. TXD                              RC,2 
  457. pa0                              03h,5 
  458. pa1                              03h,6 
  459.  
  460.  
  461. PROGRAM MEMORY USAGE TABLE:    '-' = not used  'X' = used
  462.  
  463. 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  464. 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  465. 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XX--------------
  466. 00C0 : ---------------- ---------------- ---------------- ----------------
  467. 0100 : ---------------- ---------------- ---------------- ----------------
  468. 0140 : ---------------- ---------------- ---------------- ----------------
  469. 0180 : ---------------- ---------------- ---------------- ----------------
  470. 01C0 : ---------------- ---------------- ---------------- ----------------
  471. 0200 : ---------------- ---------------- ---------------- ----------------
  472. 0240 : ---------------- ---------------- ---------------- ----------------
  473. 0280 : ---------------- ---------------- ---------------- ----------------
  474. 02C0 : ---------------- ---------------- ---------------- ----------------
  475. 0300 : ---------------- ---------------- ---------------- ----------------
  476. 0340 : ---------------- ---------------- ---------------- ----------------
  477. 0380 : ---------------- ---------------- ---------------- ----------------
  478. 03C0 : ---------------- ---------------- ---------------- ----------------
  479. 0400 : ---------------- ---------------- ---------------- ----------------
  480. 0440 : ---------------- ---------------- ---------------- ----------------
  481. 0480 : ---------------- ---------------- ---------------- ----------------
  482. 04C0 : ---------------- ---------------- ---------------- ----------------
  483. 0500 : ---------------- ---------------- ---------------- ----------------
  484. 0540 : ---------------- ---------------- ---------------- ----------------
  485. 0580 : ---------------- ---------------- ---------------- ----------------
  486. 05C0 : ---------------- ---------------- ---------------- ----------------
  487. 0600 : ---------------- ---------------- ---------------- ----------------
  488. 0640 : ---------------- ---------------- ---------------- ----------------
  489. 0680 : ---------------- ---------------- ---------------- ----------------
  490. 06C0 : ---------------- ---------------- ---------------- ----------------
  491. 0700 : ---------------- ---------------- ---------------- ----------------
  492. 0740 : ---------------- ---------------- ---------------- ----------------
  493. 0780 : ---------------- ---------------- ---------------- ----------------
  494. 07C0 : ---------------- ---------------- ---------------- ---------------X
  495.  
  496. Program Memory Words Used:  0179
  497. Program Memory Words Free:  1869
  498.  
  499. Errors: 0
  500.